<?php

class Productos extends MX_Controller{
	function __construct(){
		parent::__construct();
		$this->load->model('productos_model','productos');
		$this->load->database();
	}

	/**
	 * Carga un listado de productos dependiendo de la configuracion dada por parametro
	 * Metodo por defecto.
	 * @param Productos_config $config
	 */
	public function index(Productos_config $config=null){
		
		if(!$config){
			$config=new Productos_config();
		}

		$view='';
		
		switch ($config->busqueda) {
			case Productos_config::BUSQUEDA_TODO:
				$data['productos']=$this->productos->get_productos($config);
				$this->load->language('listado');
				$view='productos_v';
				break;

			case Productos_config::BUSQUEDA_CATEGORIA:
				//miro si es final y de no ser asi cojo todas las categorias para buscar productos de categorias inferiores
				$categorias=$this->productos->get_breadcrumb_categoria($config->valor);
				
				//si es final me ahorro el buscar los productos de categorias inferiores
				if((integer)$categorias[0]->final){
					$data['productos']=$this->productos->get_categoria($config->valor);
				} else {
					$categoria[]=$categorias[0]->last;
					$breadcrumbs=treePath($categorias,'id_categoria','id_dependencia','categoria',' > ',$categoria,true);
					$key=array_search($categoria[0],$breadcrumbs[0]['ids']);

					$names=array();
					foreach ($breadcrumbs as $breadcrumb) {
						$siguientes=array_slice($breadcrumb['names'],$key);
						foreach ($siguientes as $siguiente){
							$names[]=$siguiente;
						}
					}

					$data['productos']=$this->productos->get_categorias(array_values(array_unique($names)));
				}
				$this->load->language('listado');
				$view='productos_v';
				break;
			
			case Productos_config::BUSQUEDA_PRODUCTO:
				$data['productos']=$this->productos->get_producto($config->valor);
				$this->load->language('ficha');
				break;
		}

		if(!count($data['productos'])){
			//redirect('','location',404);
		} else {
		
			if(count($data['productos'])==1){
				$view='producto_v';
				$this->getProductData($data['productos'][0]);
			}
						
			$data['config']=&$config;
			$this->load->view($view,$data);
		}
	}

	/**
	 * navegador de categorias jerarquico
	 * @param unknown $tipo tipo de categoria
	 */
	public function nav(Productos_config $config=null, $tipo=null){
		
		$mode='equal';
		
		if($config && $config->busqueda==Productos_config::BUSQUEDA_PRODUCTO){
			$mode='start';
		}
		
		$cat='';
		switch ($config->busqueda) {
			case Productos_config::BUSQUEDA_CATEGORIA:
				$categoria=$this->productos->get_breadcrumb_categoria($config->valor);
				$cat=$categoria[0]->last;
				break;
			case Productos_config::BUSQUEDA_PRODUCTO:
				$categoria=$this->productos->get_producto($config->valor);
				$cat=$categoria[0]->id_categoria;
				break;
		}
		
		$categorias=$this->productos->get_tipo_categorias($tipo);	
		
		$arbol=buildObjectTree($categorias,'id_categoria','id_dependencia');
		/*buildHtmlTree($tree,'id_categoria','nombre','tree','enlace');*/
		
		$tree= new tree();
		$tree->att('id','secondary-nav');
		$tree->att('class','tree-lateral');
		$tree->animated=true;
		$tree->parentLink=true;
		$tree->tree=$arbol;
		$tree->allCollapsed=true;
		$tree->id='id_categoria';
		$tree->texto='nombre';
		$tree->enlace='enlace';
		if($cat){
			$tree->currentItem=$cat;
		}
		$tree->currentMode=$mode;
		
		echo $tree;
	}
	
	public function nav_firstlevel_categories(Productos_config $config=null, $tipo=null){
		$categorias=$this->productos->get_firstlevel_categories();
		
		$this->load->view('firstlevel_categories_v',array('config'=>$config,'categorias'=>$categorias));
		
		
	}
	
	public function buscador($config=null){
		//$this->lang->load('listado');
		
		if(!$config){
			$config=new Productos_config();
		}
		
		$data['config']=$config;
		
		$this->load->view('buscador',$data);
	}
	
	public function productos_buscar($search){
		
		$this->load->library(array('modulesConfig/productos_config'));
		//if ($this->input->post())

		$realconfig=$this->input->post('config');

		
		$config= new Productos_config();
		
		$config->valor=urldecode($search);
		ChromePHP::log($config->valor);
		$productos=$this->load->model('productos_model')->get_productos_buscador($config);
		
		function nombres($p,$config){
			return array('label'=>$p->nombre." ".$p->sku,'link'=>site_url($config.$p->enlace));
		}
		
		$nombres=array();
		$i=0;
		foreach ($productos as $p){
			$nombres[$i]['value']=$p->nombre;
			$nombres[$i]['label']='<div class="productos-buscador-sku">'.$p->sku.'</div><div class="productos-buscador-nombre">'.$p->nombre.'</div>';
			$nombres[$i]['link']=site_url($realconfig['urlPrefix']."/".$p->categoria.'/'.$p->enlace);
			$i++;
		}
		
		echo json_encode($nombres);
	}
	
	
	/**
	 * Encuentra la miga de pan para el componente productos con la misma configuracion
	 * @param string $config
	 * @return string
	 */
	public function breadcrumb(Productos_config $config=null){

		//meter microdatos de Breadcrumb
		if(!$config){
			$config=new Productos_config();
		}
		$breadcrumb[0]['categoria']='';
		$producto='';
		$delimiter= new span();
		$delimiter->value=' > ';
		
		switch ($config->busqueda) {
			
			case Productos_config::BUSQUEDA_CATEGORIA:
				$categorias=$this->productos->get_breadcrumb_categoria($config->valor);
				$categoria[]=$categorias[0]->last;
				$breadcrumb=treePath($categorias,'id_categoria','id_dependencia','categoria',' > ',$categoria);
				break;
			
			case Productos_config::BUSQUEDA_PRODUCTO:
				$categorias=$this->productos->get_breadcrumb_producto($config->valor);
				$categoria[]=$categorias[0]->last;
				$breadcrumb=treePath($categorias,'id_categoria','id_dependencia','categoria',' > ',$categoria);
				$producto=$delimiter.$categorias[0]->producto;
				break;
		}	
				
		$div=new div();
		$div->att('class','breadcrumb');
		$div->value=$config->urlPrefix;
		
		
		
		if(!empty($breadcrumb[0]['names'])){
			foreach ($breadcrumb[0]['names'] as $key=>$value){
				$url=$config->urlPrefix.$breadcrumb[0]['enlace'][$key];
				
				
				
				$enlace= new anchor();
				$enlace->att('href',site_url($url));
				$enlace->value=$value;
				$div->addControl($delimiter);
				$div->addControl($enlace);
			}
		}
		$div->value.=$producto;
		return $div;
	}
	
	/**
	 * Muestra la información de la categoria de los productos
	 * @param Productos_config $config
	 * @return string
	 */
	public function display_category(Productos_config $config=null){
		if(!$config){
			$config=new Productos_config();
		}
		$breadcrumb[0]['categoria']='';
		$producto='';
		switch ($config->busqueda) {
				
			case Productos_config::BUSQUEDA_CATEGORIA:
				$categorias=$this->productos->get_breadcrumb_categoria($config->valor);
				$categoria[]=$categorias[0]->last;
				$breadcrumb=treePath($categorias,'id_categoria','id_dependencia','categoria',' > ',$categoria);
				break;
				
			case Productos_config::BUSQUEDA_PRODUCTO:
				$categorias=$this->productos->get_breadcrumb_producto($config->valor);
				$categoria[]=$categorias[0]->last;
				$breadcrumb=treePath($categorias,'id_categoria','id_dependencia','categoria',' > ',$categoria);
				$producto=' > '.$categorias[0]->producto;
				break;
		}
		
		
		
		if(!empty($breadcrumb[0]['names'])){
		
			$categoriaInfo=(object)array(
					'nombre'=>'',
					'descripcion'=>'',
					'imagen'=>''
			);
			
			$i=0;
			//$info=false;
			foreach ($breadcrumb[0]['names'] as $key=>$value){
				
				$categoriaInfo->nombre=$breadcrumb[0]['names'][$i];
				
				if(!empty($breadcrumb[0]['descripcion'][$i])){
					$categoriaInfo->descripcion=$breadcrumb[0]['descripcion'][$i];
				}
					
				if(!empty($breadcrumb[0]['imagen'][$i])){
					$categoriaInfo->imagen=$breadcrumb[0]['imagen'][$i];
				}
				++$i;
			}
			
			$this->load->view('categoriaInfo_v',$categoriaInfo);
		}
		
	}
	
	/**
	 * Rellena el producto con todos sus datos n-m
	 * @param stdClass $producto 
	 */
	private function getProductData(&$producto){
		
		$producto->atributos = $this->productos->get_atributos($producto->id_producto);
		$producto->caracteristicas = $this->productos->get_caracteristicas($producto->id_producto);
		$producto->images = $this->productos->get_imagenes($producto->id_producto);
		$producto->accesorios= $this->productos->get_accesorios($producto->id_producto);
		//$data->comentarios = $model->get_comentarios($id);
		//$data->ficheros = $model->get_ficheros($id);
		//$data->videos = $model->get_videos($id);
		
		//atributos, decidir si lista o combos
		if(!empty($producto->atributos)){
			$combinacionesReales=count($producto->atributos['combinaciones']);
			$combinacionesTotales=1;
			foreach ($producto->atributos['combos'] as $atr){
				$combinacionesTotales*=count($atr['valores']);
			}
			
			//var_dump($combinacionesTotales,$combinacionesReales);
			
			if($combinacionesReales!=$combinacionesTotales){
				$producto->subProductos=$this->productos->get_subproducts($producto->id_producto);
			}
		} else {
			$producto->subProductos=$this->productos->get_subproducts($producto->id_producto);
		}
		
		//si combinaciones totales != de combinaciones reales, 
		//entonces lista, y cargamos los datos de los subproductos(crear funcion en modelo) y dentro de la vista de producto cargamos o vista nueva o vista de lista
		//si no, no hacemos nada(revisar vista para mostrar o lista o atributos)
		//hacer vista de subproducto(mostrar lista de atributos)
	}
	
	/**
	 * devuelve todos los datos del producto segun las combinaciones de atributos que se pases por POST y la combinacion seleccionada
	 * si no coincide con ninguna combinacion devuelve un mensaje de error
	 */
	public function ajax_get_product_from_attributes(){
		
		$combinaciones=$this->input->get_post('combinaciones');
		$actual=$this->input->get_post('actual');
		$id_prod=false;
		$producto=array();
		
		foreach ($combinaciones as $id_producto => $combinacion){
			if(!count(array_diff($combinacion, $actual))){
				$id_prod=$id_producto;
			}
		}
		
		if($id_prod){
			//hacer la consulta de los datos y devolverlos a la vista a traves del javascript
			$producto=$this->productos->get_producto_from_id($id_prod);
			$this->getProductData($producto[0]);
			echo json_encode($producto[0]);
		} else {
			echo json_encode(array('mensaje'=>'La combinacion seleecionada no esta disponible'));
		}
		
	}
	
	public function get_productos_carousel(Productos_config $config=null){
				
		if(!$config){
			$config=new Productos_config();
		}
		
		if($config->busqueda==Productos_config::BUSQUEDA_TODO){
			$data['productos']=$this->productos->get_productos($config);
			$this->load->view('carousel_v',$data);
			$this->dynamic_assets->add_css('js/vendor/slick/slick.css');
			$this->dynamic_assets->add_js('js/vendor/slick/slick.min.js');
			
			
			ob_start();?>
			
			<script>
				$(document).ready(function(){
					$('.productos_carousel').slick({
					 	autoplay: true,
					  	slide:'div.productos_carousel_cont',
					  	infinite: true,
					  	slidesToShow: 4,
						slidesToScroll: 1,
						autoplaySpeed:1700,
						speed: 300,
						cssEase:'ease-in'
					});
				});
			</script>
			<?php 
			
			$this->dynamic_assets->add_code_js(ob_get_clean());
			
		}
		
	}
}